#include <iostream>
using namespace std;
#include <stdio.h>

class A {
    //private:
    //int i; //可以给public使用
    public:
    int i;
    A ();
    ~A();
    void f();
};

struct B {
    int i;
};

void A::f() {
    int j = 0; //本地变量，只有f里面有效
    cout << i <<endl;
    i = 20; //直接使用private里面i，成员变量
    cout << i <<endl;
    printf("A::f()--&i=%p\n", &i);
    printf("this=%p\n", this);
}

A::A() {
    i = 0;
    printf("A::A()--this=%p\n", this);
}

A::~A() {
    printf("A::~A()\n");
}

void f(struct B* p) {
    p->i = 10;
    cout <<"struct B\n" <<p->i <<endl;


}

int main(){
    A a;  //->A::A()--this=0061FF0C 先动手
    //A aa; //->A::A()--this=0061FF08
    //A b;
    B b;
    a.i = 10;
    cout << a.i << endl;
    printf("&a=%p\n", &a);
    printf("&a.i=%p\n", &(a.i));
    a.f();//f() 是A类的而不是a对象的
    printf("-----------------\n");
    A aa;
    //b.f();
    cout << a.i << endl;
    aa.i = 100;
    printf("&aa=%p\n", &aa);
    aa.f();
    f(&b);

}
// 4201099还没有赋值i
// 20

// 10
// 10
// 20
// 20
// 100 知道是aa的100
// 20
// struct B
// 10

// this=0061FF08
// struct B
// 10
// A::~A() -> 离开main会被析构
// A::~A()